package main

import "fmt"

// BinaryOperationFunc 定义通用函数类型,等同于抽象出统一的概念
type BinaryOperationFunc func(int, int) int

// 为自定义函数类型绑定方法
func (bof BinaryOperationFunc) test(a, b int) {
	i := bof(a, b)
	fmt.Println("运算结果:", i)
}

// 针对概念提供不同的实现
func add1(x, y int) int {
	return x + y
}

func minus1(x, y int) int {
	return x - y
}

func multiply1(x, y int) int {
	return x * y
}

func divide1(x, y int) int {
	if y == 0 {
		return 0
	}
	return x / y
}

func mod1(x, y int) int {
	if y == 0 {
		return 0
	}
	return x % y
}

func main() {
	addHandler := BinaryOperationFunc(add1)
	addHandler.test(1, 2)

	minusHandler := BinaryOperationFunc(minus1)
	minusHandler.test(1, 2)

	multiplyHandler := BinaryOperationFunc(multiply1)
	multiplyHandler.test(1, 2)

	divideHandler := BinaryOperationFunc(divide1)
	divideHandler.test(1, 2)

	modHandler := BinaryOperationFunc(mod1)
	modHandler.test(1, 2)
}
